package cn.xeblog.server.action.specialAc;

import cn.xeblog.commons.entity.User;
import cn.xeblog.commons.entity.UserMsgDTO;
import cn.xeblog.commons.enums.MessageType;
import cn.xeblog.server.action.ChannelAction;
import cn.xeblog.server.builder.ResponseBuilder;
import cn.xeblog.server.cache.UserCache;
import lombok.Getter;

/**
 * @author ZhangLei
 * @date 2023/7/24 16:17
 */
@Getter
public enum AcEnum implements AcExecute {

    TIPS("-指令-", "-指令- \t\t\t==> 查看当前可用指令列表。") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            ChannelAction.send(user, body, MessageType.USER);
            User adminUser = UserCache.adminUser;
            boolean admin = user.isAdmin() || (adminUser != null && user == adminUser);
            ChannelAction.send(ResponseBuilder.system(SpecialCommandHandler.getTips(admin)));
            return false;
        }
    },
//    CHAT_GPT("会限流的AI", "会限流的AI:::{type}:::{文本}\t==> 向ChatGPT进行提问。   type可填ALL或者SELF，AI回答所有人可见或仅自己可见。") {
//        @Override
//        public boolean doAction(User user, UserMsgDTO body, String[] split) {
//            if (split.length >= 3) {
//                SpecialCommandHandler.talkToAI(user, body, split);
//                return false;
//            }
//            return true;
//        }
//    },
    TRANSLATE("翻译", "翻译:::{文本}\t\t==> 原始英文翻译已移除，改用指令翻译。支持大部分语种。") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            SpecialCommandHandler.translate(user, body, split);
            return false;
        }
    },
//    VOTE("发起投票", "发起投票:::{index}:::{用户名}\t==> index值 0:禁言，1:解除禁言，2:拉黑三分钟。") {
//        @Override
//        public boolean doAction(User user, UserMsgDTO body, String[] split) {
//            ChannelAction.send(user, body, MessageType.USER);
//            VoteHandler2.checkAndStartVote(user, split);
//            return false;
//        }
//    },
//    VOTING("投票", "投票:::[同意、不同意]\t==> 发送跟票指令") {
//        @Override
//        public boolean doAction(User user, UserMsgDTO body, String[] split) {
//            VoteHandler2.addVote(user, body,split);
//            return false;
//        }
//    },
    PRIVATE_CHAT("私聊", "私聊:::{username}:::{文本} \t==> 向指定用户私发消息。   username:当前登录用户名称。") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            if (split.length >= 3) {
                SpecialCommandHandler.talkToUser(user, body, split);
                return false;
            }
            return true;
        }
    },
    ONLINE_USER_COUNT("在线统计", "在线统计:::{index} \t\t==> 按类别统计在线人数。 index:1(国家)、2(省份)、3(城市)、4(运营商)、5(状态)") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            if (split.length >= 2) {
                SpecialCommandHandler.countOnlineUsers(user, body, split);
                return false;
            }
            return true;
        }
    },
    BLACK_ADD("加黑", "加黑:::{index}:::{target} \t==> 将用户列入黑名单，禁止登录，仅管理员可操作。  index:1(用户名)、2(ip)、3(UUID)") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            if (split.length >= 3) {
                SpecialCommandHandler.blackControl(user, body, split, "add");
            }
            return false;
        }
    },
    BLACK_REMOVE("出黑", "出黑:::{index}:::{target} \t==> 将用户移出黑名单，允许登录，仅管理员可操作。  index:1(用户名)、2(ip)、3(UUID)") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            if (split.length >= 3) {
                SpecialCommandHandler.blackControl(user, body, split, "remove");
            }
            return false;
        }
    },
    BLACK_LIST("黑名单", "黑名单:::{index} \t\t==> 查看黑名单列表，仅管理员可操作。  index:0(查看所有)，1(用户名列表)、2(ip列表)、3(UUID列表)") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            if (split.length >= 2) {
                SpecialCommandHandler.showBlackList(user, body, split);
            }
            return false;
        }
    },
    BLACK_CLEAR("清空", "清空:::{index} \t\t==> 清空黑名单列表，仅管理员可操作。  index:1(用户名)、2(ip)、3(UUID)") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            if (split.length >= 2) {
                SpecialCommandHandler.blackControl(user, body, split, "clear");
            }
            return false;
        }
    },
    OIL_PRICE("今日油价", "今日油价:::{省份}\t\t==> 查询今日油价。") {
        @Override
        public boolean doAction(User user, UserMsgDTO body, String[] split) {
            SpecialCommandHandler.oilPrice(user, body, split);
            return false;
        }
    },
    ;

    AcEnum(String key, String desc) {
        this.key = key;
        this.desc = desc;
    }

    private final String key;
    private final String desc;

    public static AcEnum getByKey(String key) {
        for (AcEnum value : AcEnum.values()) {
            if (value.key.equals(key)) {
                return value;
            }
        }
        return null;
    }

}
